package com.hmk.blogboot.web;

import com.hmk.blogboot.NotFoundException;
import com.hmk.blogboot.service.BlogService;
import com.hmk.blogboot.service.TagService;
import com.hmk.blogboot.service.TypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.web.PageableDefault;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class IndexController {
    //自动注入blogService接口
    @Autowired
    private BlogService blogService;
    @Autowired
    private TagService tagService;
    //自动注入typeService接口
    @Autowired
    private TypeService typeService;
    /*返回首页测试,构造被除数不为0异常*/
    @GetMapping("/")
    public String index(@PageableDefault(size=8,sort={"updateTime"},direction = Sort.Direction.DESC)Pageable pageable,
                        Model model){

        //分页数据添加到模板中，thymeleaf渲染模板数据
        model.addAttribute("page",blogService.listBlog(pageable));
        //tags列表数据添加到model
        model.addAttribute("tags",tagService.listTagTop(6));
        //分类列表添加model
        model.addAttribute("types",typeService.listTypeTop(10));
        //评论数展示
        model.addAttribute("recommendBlogs",blogService.listRecommendBlogTop(8));
        return "index";
    }

    //搜索查询
    @PostMapping("/search")
    public String search(@PageableDefault(size=8,sort={"updateTime"},direction = Sort.Direction.DESC)Pageable pageable,
                         @RequestParam String query, Model model){
        //模糊匹配查询结果从数据库查询添加到model
        model.addAttribute("page",blogService.listBlog("%"+query+"%",pageable));
        //搜索栏搜索内容添加model 进行thymeleaf模板渲染
        model.addAttribute("query",query);
        return "search";
    }

    /*博客详情页 根据id获取blog blog数据库记录*/
    @GetMapping("/blog/{id}")
    public String blog(@PathVariable Long id,Model model){
        model.addAttribute("blog",blogService.getAndConvert(id));
        //跳转博客详情页，
        return "blog";
    }

    //关于我的页面底部模板fragment接口方法
    @GetMapping("/footer/newblog")
    public String newBlogs(Model model){
        //在首页的最新推荐博客位置取出最新的三条博客，放在about页面的footer位置的最新博客位置
        model.addAttribute("newblogs",blogService.listRecommendBlogTop(3));
        return "_fragments :: newblogList";
    }


}
/*
* 这里出现aop中执行的结果不是自己想要执行顺序
* 是因为springboot版本问题，这个版本不按springAOP的执行顺序，形改变
* 真正核心spring  springboot
*从Spring5.2.7开始，Spring AOP不再严格按照AspectJ定义的规则来执行advice，
* 而是根据其类型按照从高到低的优先级进行执行：@Around，@Before ，@After，@AfterReturning，@AfterThrowing。
*
* 解决问题：降低版本 springboot2.3.4改为 springboot2.2.5
* */
/*访问静态资源失败
* 1在pom.xml 中properties属性修改thymeleaf版本
* 2在引用静态资源路径中添加thymeleaf路径
* 3在html中添加thymeleaf的路径
* */